package com.qfedu.bookstores.util;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.Map;

//使用三方jar包便捷获取前端数据存储到实体类对象中
public class WebUtils {
    private  WebUtils(){}
    /**
     * 因为在调用这个方法的时候,方法内部需要调用BeanUtils中提供注入方法
     * 注入的时候是将值拷贝完毕之后存储到对象中, 提供的方法需要返回一个实体类对象
     * 如果需要一个实体类对象,参数就需要设置一个实体类对象参数
     * 这个实体类对象参数数据类型应该是什么?
     * 不可能是Object, 实体类很多就需要在方法内部进行大量判断是那个实体类对象
     *                 需啊向下转型,返回值类型如果也是Object外界也要向下转型,操作就及其不方便
     * 即可以满足是什么数据类型,又可以保证是什么实体类对象 ---> 泛型方法
     *
     * 因为使用三方BeanUtils中提供注入方法 对Bean对象赋值的是建议Bean中属性名与页面中Input标签
     * 中name值尽量一致,进行注入的时候调用时Bean对象中提供set方法
     */
    public static<T> T copyParamToBean(Map value,T bean){
        try {
            System.out.println("注入之前:"+bean);
            BeanUtils.populate(bean, value);
            System.out.println("注入之后:"+bean);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return  bean;
    }
}
